<includeonly>
	<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
	<div id="factorio-data-list-<!--{$name}-->" style="background-color:#eeeeee">
	</div>
	<script>
      {
          /* 获取factorio数据 */
          $.ajaxSettings.async = false;
          let gameData = {};
          $.getJSON("https://patchwiki.biligame.com/images/factorio/6/64/9lt3dels0nj4hvi8to9teqj2mcl6vlt.doc", function (result) {
              gameData = result;
          });
          let gameTranslate = {};
          $.getJSON("https://patchwiki.biligame.com/images/factorio/a/a0/0mf9ehh2cifzgnz88k384k7vv2ios6f.doc", function (result) {
              gameTranslate = result;
          });
          $.ajaxSettings.async = true;
          const name = "<!--{$name}-->";
          // console.log("gameData", gameData);
          // console.log("gameItemSubGroup", gameData["item-subgroup"]);

          let itemData = {};
          Object.entries(gameData).forEach(([gameDataKey, gameDataValue]) => {
              if (gameDataValue.hasOwnProperty(name)) {
                  itemData[gameDataKey] = gameDataValue[name];
              }
          });
          const todoAudioArray = [];

          function translate(word) {
              const keys = Object.keys(gameTranslate);
              for (let i = 0; i < keys.length; i++) {
                  if (!keys[i].includes("description") && !keys[i].includes("autoplace")) {
                      if (gameTranslate[keys[i]][word]) {
                          return gameTranslate[keys[i]][word];
                      }
                  }
              }
              return word;
          }

          function imageName(name) {
              const bName = name.replace(/-/g, ' ');
              return bName.substr(0, 1).toUpperCase() + bName.substr(1);
          }


          function itemCol(title, value) {
              return `<div style="display: flex; align-items: center; justify-content: space-between;border-bottom: 1px solid #c1c1c1;padding: 4px;"><div>${title}</div><div>${value}</div></div>`;
          }

          function itemCol2(title, value) {
              return `<div style="display: flex; align-items: start; justify-content: flex-start;border-bottom: 1px solid #c1c1c1;padding: 4px;flex-direction: column"><div>${title}</div><div>${value}</div></div>`;
          }

          function round(number, bit) {
              const bit10 = 10 ** bit;
              return Math.round(number * bit10) / bit10;
          }

          function wikiPage(linkName, showName = linkName) {
              return `<a href="/factorio/${linkName}" title="${linkName}">${showName}</a>`;
          }

          function wikiImage(name, text = "") {
              const nameCN = translate(name);
              return `<div class="factorio-icon" style="">
											<a href="/factorio/${nameCN}" title="${nameCN}">
											<img alt="${imageName(name)}.png" src="/factorio/Special:Redirect/file/${imageName(name)}.png" decoding="async" width="32" height="32" data-file-width="32" data-file-height="32"></a>
											<div class="factorio-icon-text">${text}</div>
										</div>`;
          }

          /**
           * @return {string}
           */
          function OSSFile(path) {
              return "https://factorio-wiki.oss-cn-shanghai.aliyuncs.com/" + path.replace("__base__", "base").replace("__core__", "core");
          }


          const dealType = {
              sound: (data) => {
                  if (!data) return "";
                  const randomId = Math.round(Math.random() * 100000);
                  const audioId = `factorio-data-audio-${randomId}`;
                  let html = `<audio id="${audioId}" preload controls="controls"></audio>`;
                  todoAudioArray.push({audioId: audioId, audioData: [data].flat(Infinity).map((sound) => OSSFile(sound.filename))});
                  return html;
              },
              soundAfter: () => {
                  todoAudioArray.forEach(({audioId, audioData}) => {
                      const audio = $("#" + audioId)[0];
                      audio.src = audioData[0];
                      audio.load();
                      let i = 0;
                      audio.addEventListener('ended', () => {
                          i = i + 1;
                          if (i < audioData.length) {
                              audio.src = audioData[i];
                              audio.pause();
                              audio.load();
                              audio.play();
                          } else {
                              i = 0;
                              audio.src = audioData[0];
                              audio.load();
                          }
                      });
                  });
              },
          };

          function dealHtmlAll() {
              const dealtKeys = [];
              let html = "";

              function keyUnique(data, key, funcHas, funcNot) {
                  const keys = [key].flat(Infinity);
                  if (keys.every(k => !dealtKeys.includes(k))) {
                      if (keys.every(k => data.hasOwnProperty(k))) {
                          if (keys.length === 1) {
                              if (funcHas) funcHas(data[keys[0]]);
                          } else {
                              if (funcHas) funcHas(keys.map(k => data[k]));
                          }
                      } else {
                          if (funcNot) funcNot();
                      }
                  }
                  dealtKeys.push(...keys);
              }

              const dealHtml = {
                  base: (data) => {
                      if (!data) return "";
                      let html = "";
                      keyUnique(data, "name", (value) => html += itemCol("内部名称", value));
                      return html;
                  },
                  item: (data) => {
                      if (!data) return "";
                      let html = dealHtml.base(data);
                      keyUnique(data, "stack_size", (value) => html += itemCol("堆叠数量", value));
                      keyUnique(data, "subgroup", (value) => {
                          const itemGroupName = translate(gameData["item-subgroup"][value].group);
                          html += itemCol("分类", wikiPage(`模板:${itemGroupName}导航`, itemGroupName));
                          html += itemCol("子分类", data["subgroup"]);
                      });
                      return html;
                  },
                  itemWithEntityData: (data) => {
                      if (!data) return "";
                      return dealHtml.item(data);
                  },
                  entity: (data) => {
                      if (!data) return "";
                      let html = dealHtml.base(data);
                      keyUnique(data, "minable", (value) => html += itemCol("采集时间", value["mining_time"] + "秒"), () => html += itemCol("采集时间", "-"));
                      keyUnique(data, "next_upgrade", (value) => html += itemCol("下一升级", wikiImage(value)));
                      keyUnique(data, "working_sound", (value) => html += itemCol2("工作声音", dealType.sound(value.sound)));
                      keyUnique(data, "mined_sound", (value) => html += itemCol2("挖掘声音", dealType.sound(value)));
                      keyUnique(data, "build_sound", (value) => html += itemCol2("建造声音", dealType.sound(value)));
                      keyUnique(data, "open_sound", (value) => html += itemCol2("开启声音", dealType.sound(value)));
                      keyUnique(data, "close_sound", (value) => html += itemCol2("关闭声音", dealType.sound(value)));
                      keyUnique(data, "vehicle_impact_sound", (value) => html += itemCol2("车辆撞击声", dealType.sound(value)));
                      return html;

                  },
                  entityWithHealth: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entity(data);
                      keyUnique(data, "max_health", (value) => html += itemCol("生命值", value));
                      keyUnique(data, "resistances", (value) => html += itemCol("抗性", value.map((resistance) => `${translate(resistance.type)}: ${resistance.decrease || 0}/${resistance.percent || 0}%<br/>`).join('')), () => html += itemCol("抗性", `无`));

                      return html;
                  },
                  container: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "inventory_size", (value) => html += itemCol("容量大小", value + "组"));
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  storageTank: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "two_direction_only", (value) => html += itemCol("仅有双向", value ? "是" : "否"));
                      return html;
                  },
                  transportBeltConnectable: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "speed", (value) => html += itemCol("速度", value * 480 + "个/秒"));
                      return html;
                  },
                  transportBelt: (data) => {
                      if (!data) return "";
                      let html = dealHtml.transportBeltConnectable(data);
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  undergroundBelt: (data) => {
                      if (!data) return "";
                      let html = dealHtml.transportBeltConnectable(data);
                      keyUnique(data, "max_distance", (value) => html += itemCol("最大连接距离", value));
                      return html;
                  },
                  splitter: (data) => {
                      if (!data) return "";
                      let html = dealHtml.transportBeltConnectable(data);
                      return html;
                  },
                  inserter: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      keyUnique(data, "energy_per_movement", (value) => html += itemCol("每次移动消耗", value));
                      keyUnique(data, "energy_per_rotation", (value) => html += itemCol("每次转动消耗", value));
                      keyUnique(data, "extension_speed", (value) => html += itemCol("伸展速度", round(value * 60, 2) + "/秒"));
                      keyUnique(data, "rotation_speed", (value) => html += itemCol("旋转速度", round(value * 60, 2) + "/秒"));
                      return html;
                  },
                  electricPole: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "maximum_wire_distance", (value) => html += itemCol("电线最大距离", value));
                      keyUnique(data, "supply_area_distance", (value) => html += itemCol("供电面积", `${value * 2}x${value * 2}`));
                      return html;
                  },
                  pipe: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      return html;
                  },
                  pipeToGround: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      return html;
                  },
                  pump: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "energy_usage", (value) => html += itemCol("用电量", value));
                      keyUnique(data, "pumping_speed", (value) => html += itemCol("泵速", value * 60 + "/秒"));
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  railPlanner: (data) => {
                      if (!data) return "";
                      let html = dealHtml.item(data);
                      keyUnique(data, "straight_rail", (value) => html += itemCol("直线铁轨", value));
                      keyUnique(data, "curved_rail", (value) => html += itemCol("曲线铁轨", value));
                      return html;
                  },
                  trainStop: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  rainSignalBase: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  rainSignal: (data) => {
                      if (!data) return "";
                      return dealHtml.rainSignalBase(data);
                  },
                  rainChainSignal: (data) => {
                      if (!data) return "";
                      return dealHtml.rainSignalBase(data);
                  },
                  vehicle: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "braking_power", (value) => html += itemCol("制动功率", value));
                      keyUnique(data, "braking_force", (value) => html += itemCol("制动力", value));
                      keyUnique(data, "weight", (value) => html += itemCol("车辆重量", value));
                      return html;
                  },
                  rollingStock: (data) => {
                      if (!data) return "";
                      let html = dealHtml.rainSignalBase(data);
                      keyUnique(data, "air_resistance", (value) => html += itemCol("空气阻力", value));
                      return html;
                  },
                  locomotive: (data) => {
                      if (!data) return "";
                      let html = dealHtml.rollingStock(data);
                      keyUnique(data, "max_power", (value) => html += itemCol("最大功率", value));
                      return html;
                  },
                  cargoWagon: (data) => {
                      if (!data) return "";
                      let html = dealHtml.rollingStock(data);
                      keyUnique(data, "inventory_size", (value) => html += itemCol("容量大小", value + "组"));
                      return html;
                  },
                  fluidWagon: (data) => {
                      if (!data) return "";
                      let html = dealHtml.rollingStock(data);
                      keyUnique(data, "capacity", (value) => html += itemCol("容量大小", value));
                      return html;
                  },
                  artilleryWagon: (data) => {
                      if (!data) return "";
                      let html = dealHtml.rollingStock(data);
                      keyUnique(data, "gun", (value) => html += itemCol("车载武器", translate(value)));
                      keyUnique(data, "inventory_size", (value) => html += itemCol("弹药容量", value + "组"));
                      keyUnique(data, "ammo_stack_limit", (value) => html += itemCol("弹药堆叠", value));
                      keyUnique(data, "turn_after_shooting_cooldown", (value) => html += itemCol("射击冷却", Math.round(value / 60) + "秒"));
                      keyUnique(data, "rotating_sound", (value) => html += itemCol2("旋转声音", dealType.sound(value.sound)));
                      return html;
                  },
                  car: (data) => {
                      if (!data) return "";
                      let html = dealHtml.vehicle(data);
                      keyUnique(data, "consumption", (value) => html += itemCol("行驶功率", value));
                      keyUnique(data, "inventory_size", (value) => html += itemCol("容量大小", value + "组"));
                      keyUnique(data, "guns", (value) => html += itemCol("车载武器", value.map(gun => translate(gun)).join(',')));
                      keyUnique(data, "sound_no_fuel", (value) => html += itemCol2("无燃料声音", dealType.sound(value)));
                      return html;
                  },
                  flyingRobot: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "speed", (value) => html += itemCol("速度", value));
                      keyUnique(data, "energy_per_move", (value) => html += itemCol("移动耗能", value + "/" + wikiPage("格")));
                      keyUnique(data, "energy_per_tick", (value) => html += itemCol("工作耗能", value + "/" + wikiPage("刻")));
                      keyUnique(data, "max_energy", (value) => html += itemCol("最大储能", value));
                      keyUnique(data, "max_speed", (value) => html += itemCol("最大速度", value));
                      keyUnique(data, ["max_to_charge", "min_to_charge"], ([max, min]) => html += itemCol("充能条件", `<div>${max}~: 不去充能</div><div>${min}~${max}: 可去充能</div><div>0~${min}: 必去充能</div>`));
                      keyUnique(data, "speed_multiplier_when_out_of_energy", (value) => html += itemCol("无电速度系数", value));
                      return html;
                  },
                  robotWithLogisticInterface: (data) => {
                      if (!data) return "";
                      let html = dealHtml.flyingRobot(data);
                      keyUnique(data, "max_payload_size", (value) => html += itemCol("最大负载量", value));
                      return html;
                  },
                  logisticRobot: (data) => {
                      if (!data) return "";
                      let html = dealHtml.robotWithLogisticInterface(data);
                      return html;
                  },
                  constructionRobot: (data) => {
                      if (!data) return "";
                      let html = dealHtml.robotWithLogisticInterface(data);
                      return html;
                  },
                  logisticContainer: (data) => {
                      if (!data) return "";
                      let html = dealHtml.container(data);
                      keyUnique(data, "logistic_slots_count", (value) => html += itemCol("过滤插槽数", value));
                      return html;
                  },
                  roboport: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "charging_energy", (value) => html += itemCol("机器人充能功率", value));
                      keyUnique(data, "energy_usage", (value) => html += itemCol("机器人存储功率", value));
                      keyUnique(data, "construction_radius", (value) => html += itemCol("建造范围", `${value * 2}x${value * 2}`));
                      keyUnique(data, "logistics_radius", (value) => html += itemCol("物流范围", `${value * 2}x${value * 2}`));
                      keyUnique(data, "material_slots_count", (value) => html += itemCol("材料容量", value + "组"));
                      keyUnique(data, "recharge_minimum", (value) => html += itemCol("最低工作储能", value));
                      keyUnique(data, "robot_slots_count", (value) => html += itemCol("机器人容量", value + "组"));
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  lamp: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "energy_usage_per_tick", (value) => html += itemCol("用电量", value));
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  combinator: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "active_energy_usage", (value) => html += itemCol("激活时用电量", value));
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  arithmeticCombinator: (data) => {
                      if (!data) return "";
                      let html = dealHtml.combinator(data);
                      return html;
                  },
                  deciderCombinator: (data) => {
                      if (!data) return "";
                      let html = dealHtml.combinator(data);
                      return html;
                  },
                  constantCombinator: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "item_slot_count", (value) => html += itemCol("物品插槽数", value));
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  powerSwitch: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "wire_max_distance", (value) => html += itemCol("线缆最大距离", value));
                      return html;
                  },
                  programmableSpeaker: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entityWithHealth(data);
                      keyUnique(data, "circuit_wire_max_distance", (value) => html += itemCol("信号线最大距离", value));
                      return html;
                  },
                  projectile: (data) => {
                      if (!data) return "";
                      let html = dealHtml.entity(data);
                      return html;
                  },
                  tool: (data) => {
                      if (!data) return "";
                      let html = dealHtml.item(data);
                      keyUnique(data, "durability", (value) => html += itemCol("耐久度", value));
                      return html;
                  },
                  repairTool: (data) => {
                      if (!data) return "";
                      let html = dealHtml.tool(data);
                      keyUnique(data, "speed", (value) => html += itemCol("维修速度", value));
                      return html;
                  },
              };
              console.log(itemData);
              html += dealHtml.item(itemData["item"]);
              html += dealHtml.itemWithEntityData(itemData["item-with-entity-data"]);
              html += dealHtml.container(itemData["container"]);
              html += dealHtml.storageTank(itemData["storage-tank"]);
              html += dealHtml.transportBelt(itemData["transport-belt"]);
              html += dealHtml.undergroundBelt(itemData["underground-belt"]);
              html += dealHtml.splitter(itemData["splitter"]);
              html += dealHtml.inserter(itemData["inserter"]);
              html += dealHtml.electricPole(itemData["electric-pole"]);
              html += dealHtml.pipe(itemData["pipe"]);
              html += dealHtml.pipeToGround(itemData["pipe-to-ground"]);
              html += dealHtml.pump(itemData["pump"]);
              html += dealHtml.railPlanner(itemData["rail-planner"]);
              html += dealHtml.trainStop(itemData["train-stop"]);
              html += dealHtml.rainSignal(itemData["rail-signal"]);
              html += dealHtml.rainChainSignal(itemData["rail-chain-signal"]);
              html += dealHtml.locomotive(itemData["locomotive"]);
              html += dealHtml.cargoWagon(itemData["cargo-wagon"]);
              html += dealHtml.fluidWagon(itemData["fluid-wagon"]);
              html += dealHtml.artilleryWagon(itemData["artillery-wagon"]);
              html += dealHtml.car(itemData["car"]);
              html += dealHtml.logisticRobot(itemData["logistic-robot"]);
              html += dealHtml.constructionRobot(itemData["construction-robot"]);
              html += dealHtml.logisticContainer(itemData["logistic-container"]);
              html += dealHtml.roboport(itemData["roboport"]);
              html += dealHtml.lamp(itemData["lamp"]);
              html += dealHtml.arithmeticCombinator(itemData["arithmetic-combinator"]);
              html += dealHtml.deciderCombinator(itemData["decider-combinator"]);
              html += dealHtml.constantCombinator(itemData["constant-combinator"]);
              html += dealHtml.powerSwitch(itemData["power-switch"]);
              html += dealHtml.programmableSpeaker(itemData["programmable-speaker"]);
              html += dealHtml.repairTool(itemData["repair-tool"]);

              return html;
          }

          $(`#factorio-data-list-${name}`).html(dealHtmlAll());

          dealType.soundAfter();
          // if (itemData["selection_box"] && itemData["collision_box"]) {
          //     html += `<div><div id="factorio-data-canvas-${name}-sample" style="display: flex;align-items: center;justify-content: space-around;"></div><canvas id="factorio-data-canvas-${name}" style="padding: 3px"></canvas></div>`;
          // }
          // if (itemData["selection_box"] && itemData["collision_box"]) {
          //     const selection_box = itemData["selection_box"] || [[0, 0], [0, 0]];
          //     const selectionSize = [selection_box[1][0] - selection_box[0][0], selection_box[1][1] - selection_box[0][1]];
          //     const collision_box = itemData["collision_box"] || [[0, 0], [0, 0]];
          //     const collisionSize = [collision_box[1][0] - collision_box[0][0], collision_box[1][1] - collision_box[0][1]];
          //     const itemWidth = Math.ceil(Math.max(selectionSize[0], collisionSize[0]));
          //     const itemHeight = Math.ceil(Math.max(selectionSize[1], collisionSize[1]));
          //
          //     let allWidth = itemWidth, allHeight = itemHeight;
          //     if (itemData["supply_area_distance"]) {
          //         allWidth = Math.max(allWidth, itemData["supply_area_distance"] * 2);
          //         allHeight = Math.max(allHeight, itemData["supply_area_distance"] * 2);
          //     }
          //
          //     const canvas = $(`#factorio-data-canvas-${name}`)[0];
          //     const maxX = 300;
          //     const gridX = Math.max(allWidth + 2, 6 - allWidth % 2);
          //     const gridY = gridX - allWidth + allHeight;
          //     const gridSize = maxX / gridX;
          //     const maxY = gridSize * gridY;
          //     const center = [maxX / 2, maxY / 2];
          //     canvas.setAttribute("width", maxX);
          //     canvas.setAttribute("height", maxY);
          //
          //     const ctx = canvas.getContext('2d', {alpha: true});
          //     ctx.beginPath();
          //     ctx.strokeStyle = "#dddddd";
          //     for (let i = 0; i <= gridX; i++) {
          //         ctx.moveTo(i * gridSize, 0);
          //         ctx.lineTo(i * gridSize, maxY);
          //     }
          //     for (let i = 0; i <= gridY; i++) {
          //         ctx.moveTo(0, i * gridSize);
          //         ctx.lineTo(maxX, i * gridSize);
          //     }
          //     ctx.stroke();
          //
          //     let sampleHtml = "";
          //     ctx.font = "14px sans-serif";
          //     const selectionColor = "rgba(255 ,0, 0, 0.8)";
          //     ctx.strokeStyle = selectionColor;
          //     ctx.strokeRect(center[0] + selection_box[0][0] * gridSize, center[1] + selection_box[0][1] * gridSize, selectionSize[0] * gridSize, selectionSize[1] * gridSize);
          //     sampleHtml += `<div style="border-bottom: 1px solid ${selectionColor}">选取面积</div>`;
          //
          //     const collisionColor = "rgba(0 ,255, 0, 0.8)";
          //     ctx.strokeStyle = collisionColor;
          //     ctx.strokeRect(center[0] + collision_box[0][0] * gridSize, center[1] + collision_box[0][1] * gridSize, collisionSize[0] * gridSize, collisionSize[1] * gridSize);
          //     sampleHtml += `<div style="border-bottom: 1px solid ${collisionColor}">碰撞面积</div>`;
          //
          //     if (itemData["supply_area_distance"]) {
          //         const distance = itemData["supply_area_distance"];
          //         const distanceColor = "rgba(0 ,0, 255, 0.8)";
          //         ctx.strokeStyle = distanceColor;
          //         ctx.strokeRect(center[0] - distance * gridSize, center[1] - distance * gridSize, distance * 2 * gridSize, distance * 2 * gridSize);
          //         sampleHtml += `<div style="border-bottom: 1px solid ${distanceColor}">供电面积</div>`;
          //     }
          //     $(`#factorio-data-canvas-${name}-sample`).html(sampleHtml);
          // }
      }
	</script>
</includeonly>
